package delphorm.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import delphorm.entite.questionnaire.Questionnaire;
import delphorm.service.questionnaire.IQuestionnaire;
import delphorm.web.exception.MauvaiseManipulationException;

public class ModifierEtatQuestionnaire implements Controller {
	IQuestionnaire serviceQuestionnaire;
	private String successView;

	public String getSuccessView() {
		return successView;
	}

	public void setSuccessView(String successView) {
		this.successView = successView;
	}

	public IQuestionnaire getServiceQuestionnaire() {
		return serviceQuestionnaire;
	}

	public void setServiceQuestionnaire(IQuestionnaire serviceQuestionnaire) {
		this.serviceQuestionnaire = serviceQuestionnaire;
	}

	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// recupere le numero du questionnaire
		String numStr = request.getParameter("numeroquestionnaire");
		// TODO exception si null
		Long numero = Long.parseLong(numStr);
		// TODO exception si erreur

		// recupere le nouvel etat du questionnaire
		String etat = request.getParameter("etat");
		// TODO exception si null

		Map model = new HashMap();

		Questionnaire questionnaire = serviceQuestionnaire
				.getQuestionnaireParId(numero);

		if (questionnaire == null) {
			throw new MauvaiseManipulationException(this.getClass(),
					"Le questionnaire " + numero + " est introuvable.");
		}
		
		int nbQuestions = questionnaire.getQuestions().size();
		
		// change l'etat du questionnaire
		if (etat.equals("enTest")) {
			serviceQuestionnaire.mettreQuestionnaireEnTest(numero);
			model.put("etat", "en test");
		} else if (etat.equals("enPublication")) {
			if(nbQuestions == 0)
			{
				get
			}
			serviceQuestionnaire.mettreQuestionnaireEnPublication(numero);
			model.put("etat", "publié");
		} else if (etat.equals("enPerime")) {
			serviceQuestionnaire.mettreQuestionnaireEnPerime(numero);
			model.put("etat", "périmé");
		} else if (etat.equals("enTravail")) {
			serviceQuestionnaire.mettreQuestionnaireEnTravail(numero);
			model.put("etat", "en création");
		} else {
			// TODO localisation dans le fichier de messages
			throw new MauvaiseManipulationException(this.getClass(),
					"Le paramètre état n'est pas valide.");
		}
		return new ModelAndView(getSuccessView(), model);
	}

}
